In the context of desktop applications (e.g. office software or web browsers), a cache is a device located logically between a content source (typically an application server or Web server though sometimes another cache) and one or more clients. Web pages, documents, images, movies, etc. (collectively known as “content”) stored by these content sources may be downloaded and displayed by the clients. The content can be displayed in the context of a Web browser executing on the client platform, or in the context of other application programs (e.g., audio/video players, document viewers, image viewers, etc.).
The content distributed by the various content sources may contain a variety of “objects”. In this context, the term object is used to refer to logical entities such as images or other multimedia data, such as animation, audio (such as streaming audio), movies, video (such as streaming video), program fragments, such as Java, Javascript, or ActiveX, or Web documents. Generally speaking, objects are relatively large logical entities.
As indicated above, a cache typically sits between the client and the content source and monitors transmissions therebetween. For example, if the client requests a Web page, the cache will see the request and check to see if it stores a local copy thereof. If so, the cache will return that copy to the client. Otherwise, the cache will forward the request to the content source. As the content source returns the requested objects to the client, the cache keeps a copy for itself, which copy may then be used to service later requests for the object. Application caches thus reduce latency (it takes less time for a client to get an object from a nearby cache than from the original content source); and reduce network traffic (because each object is only retrieved from the content source once, or periodically if the object is subject to changes over time).
The “object caching” discussed above is not the only form of caching available today. “Byte caching” or “stream caching” is an optimization technique in which information at a level below that of entire objects is cached. These cached bytes or streams are then associated with tokens so that when identical byte/stream patterns are observed in newly requested content, the byte/stream information is replaced by the token. Hence, if the byte/stream patterns repeat often enough, significant bandwidth savings can be achieved using these transmission optimizations.